home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 6
/
FM Towns Free Software Collection 6.iso
/
t_os
/
wink24
/
src
/
moji.c
< prev
next >
Wrap
Text File
|
1993-07-08
|
2KB
|
96 lines
#include <stdio.h>
#include <stdlib.h>
#include <fmcfrb.h>
#include "defs.h"
extern int strlen();
/*
* 1文字入力
*
*
*/
void MOJI_input1Char(UCHAR *moji_area,unsigned int ky
,int max_moji,int *lcur_x)
{
unsigned int l;
char dmy[80];
int cur_x,tst_x,before_x;
if (ky == 0xFFFF) return;
cur_x = *lcur_x;
if (cur_x > strlen(moji_area)) cur_x = strlen(moji_area);
if (cur_x == max_moji) cur_x = max_moji-1;
switch (ky) {
case 0x8: /* BS */
if (cur_x != 0) {
if ( cur_x > 1 && iskanji(*(moji_area+cur_x - 2))) {
cur_x -= 2;
strcpy(moji_area+cur_x,moji_area+cur_x+2);
} else {
cur_x--;
strcpy(moji_area+cur_x,moji_area+cur_x+1);
}
}
break;
case 0x7f: /* DEL */
l = strlen(moji_area);
if (l != 0 && l >= (cur_x+1)) {
if (l == 1 || iskanji(*(moji_area+cur_x)) == 0) {
strcpy(moji_area+cur_x,moji_area+cur_x+1);
} else {
strcpy(moji_area+cur_x,moji_area+cur_x+2);
}
}
break;
case 0x1d: /* ← */
tst_x = before_x = 0;
while (cur_x != tst_x && tst_x <max_moji) {
before_x = tst_x;
if (iskanji(*(moji_area+tst_x)))
tst_x += 2;
else
tst_x++;
}
cur_x = before_x;
break;
case 0x1c: /* → */
if (cur_x != strlen(moji_area)) {
if (iskanji(*(moji_area+cur_x))) {
cur_x = cur_x + 2;
} else {
cur_x++;
}
if (cur_x > max_moji-1) cur_x = max_moji-1;
}
break;
case 0x0d: /* ret */
break;
default:
if (strlen(moji_area) != max_moji-1 || iskanji(ky) == FALSE) {
if (strlen(moji_area) < max_moji && ky < 255 && ky > 31) {
if (cur_x == strlen(moji_area)) {
*(moji_area+cur_x) = ky;
*(moji_area+cur_x+1) = '\0';
} else {
strcpy(dmy,moji_area+cur_x);
strcpy(moji_area+cur_x+1,dmy);
*(moji_area+cur_x) = ky;
}
cur_x++;
if (cur_x > max_moji-1) cur_x = max_moji-1;
}
}
break;
}
*lcur_x = cur_x;
}